Python3

您所在的位置:网站首页 python 串口发送16进制数据 Python3

Python3

2024-07-05 05:33| 来源: 网络整理| 查看: 265

串口通信的基础知识,请参考博客:https://blog.csdn.net/xiaobaixiongxiong/article/details/83998436

串口通信就是计算机和外设之间,通过数据信号线、底线、控制线等,按位进行传输数据的一种通讯方式。这种通讯方式使用的数据线少。 串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆及使用的协议。

  Python实现简单的串口通信 1 获取可用的串口列表:

参考代码:  

import serial import serial.tools.list_ports port_list = list(serial.tools.list_ports.comports()) print(port_list) if len(port_list) == 0: print("无可用串口!") else: for i in range(0, len(port_list)): print(port_list[i])

输出结果:

  2 简单的串口通信

1. 从串口读数据

import serial # pyserial try: # 端口:CNU; Linux上的/dev /ttyUSB0等; windows上的COM3等 portx = "COM3" # 波特率,标准值有:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200 bps = 115200 # 超时设置,None:永远等待操作; # 0:立即返回请求结果; # 其他:等待超时时间(单位为秒) timex = None # 打开串口,并得到串口对象 ser = serial.Serial(portx, bps, timeout=timex) print("串口详情参数:", ser) # # 十六进制的发送 # result = ser.write(chr(0x06).encode("utf-8")) # 写数据 # print("写总字节数:", result) # 十六进制的读取 print(ser.read().hex()) # 读一个字节 print("----------") ser.close() # 关闭串口 except Exception as e: print("error!", e)

2.从串口写

import serial # pyserial try: # 端口:CNU; Linux上的/dev /ttyUSB0等; windows上的COM3等 portx = "COM4" # 波特率,标准值有:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200 bps = 115200 # 超时设置,None:永远等待操作; # 0:立即返回请求结果; # 其他:等待超时时间(单位为秒) timex = 5 # 打开串口,并得到串口对象 ser = serial.Serial(portx, bps, timeout=timex) # 写数据 result = ser.write("HELLO WORLD".encode("gbk")) print("写总字节数:", result) ser.close() # 关闭串口 except Exception as e: print("error!", e)

运行结果:(虽然写端写了11个字节,可是读端只读了一个(采用了16进制的方式显示))

 

3 借助串口通信实现的简单聊天器:

参考代码:

import serial import threading DATA = "" # 读取的数据 NOEND = True # 是否读取结束 # 读数据的本体 def read_data(ser): global DATA, NOEND # 循环接收数据(此为死循环,可用线程实现) while NOEND: if ser.in_waiting: DATA = ser.read(ser.in_waiting).decode("gbk") print("\n>> receive: ", DATA, "\n>>", end="") # print(">>", end="") if(DATA == "quit"): print("oppo seri has closen.\n>>", end="") # 打开串口 def open_seri(portx, bps, timeout): ret = False try: # 打开串口,并得到串口对象 ser = serial.Serial(portx, bps, timeout=timeout) # 判断是否成功打开 if(ser.is_open): ret = True th = threading.Thread(target=read_data, args=(ser,)) # 创建一个子线程去等待读数据 th.start() except Exception as e: print("error!", e) return ser, ret # 关闭串口 def close_seri(ser): global NOEND NOEND = False ser.close() # 写数据 def write_to_seri(ser, text): res = ser.write(text.encode("gbk")) # 写 return res # 读数据 def read_from_seri(): global DATA data = DATA DATA = "" #清空当次读取 return data if __name__ == "__main__": # ser, ret = open_seri("COM4", 115200, None) # 串口com3、bps为115200,等待时间为永久 # if ret == True: # 判断串口是否成功打开 # count = write_to_seri(ser, "exit") # print("写入总字节数:", count) # 打开一个串口 port = input("输入串口名:") ser, ret = open_seri(port, 115200, None) # 串口com3、bps为115200,等待时间为永久 # oprate_lst = {"quit":close_seri} # print("操作数字所对应的行为,1:read_from_seri 2:write_to_seri 3:close_seri: ") while True: text = input(">>") write_to_seri(ser, text) if text == "quit": close_seri(ser) print("bye!") break

结果展示:

 

参考博客:

https://blog.csdn.net/xiaobaixiongxiong/article/details/83998436

https://www.cnblogs.com/dongxiaodong/p/9992083.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3